package cn.tedu._04weibo.controller;

import cn.tedu._04weibo.base.response.JsonResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.AttributedCharacterIterator;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@RestController
@RequestMapping("/v1/file/")
public class UploadController {
    @PostMapping("upload")
    public JsonResult upload(MultipartFile file) throws IOException {
        /*
            1.获取原始文件名 getOriginalFilename();
            2.获取原始文件名后缀 substring();
            3.处理唯一文件名 UUID.randomUUID();
            4.处理日期格式 new SimpleDateFormat(...);
            5.创建目录: d:/files/2025/03/12/
            6.保存文件: d:/files/2025/03/12/xxx.jpg
            7.返回响应;
         */
        //获取原始文件的名字
        String originalFilename = file.getOriginalFilename();
        //将原始名字从.处进行分割，只保留后缀名
        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
        //再将这个名字拼接上前面的随机名字生成最终的文件名
        String name = UUID.randomUUID() + substring;
        //存放文件，要有路径，磁盘名+文件夹目录+文件名
        //先创建磁盘明
        String diskPath = "d:/files/";
        //在创建文件夹目录，文件夹目录是自动生成，根据日期每日生成一个新的日期文件夹
        //定义日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
        AttributedCharacterIterator format = dateFormat.formatToCharacterIterator(new Date());
        //将磁盘名与路径名进行拼接
        String path = diskPath + format;
        //生成一个完整的路径名
        File file1 = new File(path);
        //创建新路径之前要先判断此路径是否已经存在了，如果存在了就不需要再创建了
        if (!file1.exists()){
            file1.mkdirs();
        }
        //再将路径名和文件名拼接起来就是完整的文件存储路径名了
        String s = path+name;
        file.transferTo(new File(s));
        return JsonResult.ok(s);
    }
}






















